package br.ita.supertrunfo.server.core;

import java.io.Serializable;
import java.rmi.RemoteException;

import br.ita.supertrunfo.server.domain.BaralhoIP;
import br.ita.supertrunfo.server.domain.CartaIP;

import br.ita.supertrunfo.common.core.interfaces.remoteobjects.ObjJogador;
import br.ita.supertrunfo.common.core.interfaces.remoteobjects.ObjCarta;

public class ClienteRN implements ObjJogador, Serializable {

	private final int NUM_CARTAS = 32;
	private static final long serialVersionUID = 1L;
	
	private CartaIP[] filaDeCartas;
	private PartidaRN partida;
	private String apelido;
	private int lugarDoJogador;
	
	//Construtor
	public ClienteRN(String apelido) throws RemoteException {
		this.setApelido(apelido);
		this.setFilaDeCartas(new CartaIP[NUM_CARTAS]);		
	}
		
	
	//Getters and Setters
	public ObjCarta[] getFilaDeCartas() {
		return this.filaDeCartas;
	}
	public void setFilaDeCartas(CartaIP[] filaDeCartas) {
		this.filaDeCartas = filaDeCartas;
	}
	public void setFilaDeCartas(ObjCarta[] filaDeObjCartas) {
		try {
			BaralhoIP baralho = PartidaRN.getInstance().getCartasEmJogo();
			for(int i = 0; i < NUM_CARTAS; i++)
				if(filaDeObjCartas[i] != null)
					for(int j = 1; j <= NUM_CARTAS; j++)					
						if(filaDeObjCartas[i].getCodigo().equals(baralho.getCarta(j).getCodigo()))
							this.getFilaDeCartas()[i] = baralho.getCarta(j);			
		} catch (RemoteException e) {}
	}	

	public PartidaRN getPartida() {
		return partida;
	}
	public void setPartida(PartidaRN partida) {
		this.partida = partida;
	}

	public String getApelido() {
		return apelido;
	}
	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	public int getLugarDoJogador() {
		return lugarDoJogador;
	}
	public void setLugarDoJogador(int lugarDoJogador) {
		this.lugarDoJogador = lugarDoJogador;
	}

	public int getNumDeCartas() {
		for(int i = 0; i < NUM_CARTAS; i++)
			if(this.getFilaDeCartas()[i] == null)
				return i;
		return NUM_CARTAS;
	}
}
